package com.demo.chapter12date;

import java.time.DayOfWeek;
import java.time.LocalDate;
import static java.time.temporal.TemporalAdjusters.*;

//有时候，你需要一个更加复杂的操作，比如将日期调整到下个周日，下个工作日，或者本月最后一天等
public class TemporalAdjusterDemo {

	public static void useTemporalAdjuster() {
        LocalDate date = LocalDate.of(2016, 8, 29);
        //生成新日期，将其值设定为日期调整后，第一个符合指定星期几要求的日期，如果该日期已经符合，直接返回改对象
        date = date.with(nextOrSame(DayOfWeek.SUNDAY));//2016-09-04
        System.out.println(date);
        //生成新日期，将其值设定为下月最后一天
        date = date.with(lastDayOfMonth());//2016-09-30
        System.out.println(date);
        //生成新日期，将其值设定为当年第一天
        date = date.with(firstDayOfYear());//2016-01-01
        System.out.println(date);
        //生成新日期，将其值设定为同一个月第3周的周五
        date = date.with(dayOfWeekInMonth(3, DayOfWeek.FRIDAY));//2016-01-15
        System.out.println(date);
        //生成新日期，将其值设定为同一个月中，最后一个符合星期几要求的值
        date = date.with(lastInMonth(DayOfWeek.TUESDAY));//2016-01-26
        System.out.println(date);
        //生成新日期，将其值设定为日期调整后，第一个符合指定星期几要求的日期
        date = date.with(next(DayOfWeek.MONDAY));//2016-02-01
        System.out.println(date);
        //自定义
        date = date.with(new NextWorkingDay());//2016-02-02
        System.out.println(date);
    }

	public static void main(String[] args) {
		useTemporalAdjuster();
	}

}
